iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 18
0
自我挑戰組

向Android APP開發說Hello系列 第 18

Day 18. 多個Activity連結

  • 分享至 

  • xImage
  •  

Miwok AppApp專案中,總共有5個Activities,其中activity_main.xml是主畫面,也是我們在手機上運行的畫面。
若要將主畫面與其他Activities連結,就必須使用Intent
https://ithelp.ithome.com.tw/upload/images/20181102/20107569X7YQTJGyzg.jpg

為TextView加上OnClick事件

之前的便當訂購App中我們也有使用到OnClick()事件,用在Button上,但Button其實也是一種TextView,是繼承了TextView的Class,因此我們當然也可以為TextView加上OnClick()囉。
https://ithelp.ithome.com.tw/upload/images/20181102/20107569hFkpxFv3kH.jpg

例如以第一個區塊為例,加上android:onClick="openNumberList()"

    <TextView
        android:id="@+id/numbers"
        style="@style/CategoryStyle"
        android:background="@color/category_numbers"
        android:text="@string/category_numbers"
        android:onClick="openNumberList()"/>

並為MainActivity.java的class MainActivity內加上對應的方法。
建立Intent物件i,該建構式需要context和class兩個參數:
public Intent (Context packageContext, Class <> cls)

  • this指的是目前的Activity,因此context這個參數讓Intent能夠了解App目前的狀態(state)。
  • Class參數則放入要打開的Activity名稱(NumbersActivity),並加上.class
    public void openNumberList(View view){
        Intent i = new Intent(this, NumbersActivity.class);
        startActivity(i);
    }

顯式與隱式Intent

先來回顧一下Day 13. App間的資訊傳遞 - Intent,當時也使用了Intent:

// 加入Intent
        Intent intent = new Intent(Intent.ACTION_SENDTO);
        intent.setData(Uri.parse("mailto:")); // only email apps should handle this
        intent.putExtra(Intent.EXTRA_SUBJECT,  customerName + "先生/小姐 的訂單"); //主旨
        intent.putExtra(Intent.EXTRA_TEXT,  priceMessage); //內容
        if (intent.resolveActivity(getPackageManager()) != null) {
            startActivity(intent);
        }

兩者有些差異:

  • 隱式(implicit) Intent用在你不在意由哪個App來處理你的Intent時,需要的參數除了Action、Data URI外,可能還有Catagery、Components與Extras,來讓Android得知哪個App能夠最符合需求。

  • 顯式(explicit) Intent則用在你需要指定特定App或Activity來處理發出的Intent,只要指定Context與Component(可以是Class或Activity),如果有需要再加上Data URI。

顯然地,在便當訂購App中所使用的是implicit Intent,任何一個email App都可以處理便當App所發出的Intent;而這個Miwok App的Main Activity使用的是explicit Intent,明確地指定了NumbersActivity來接收Intent。

小節

由今天的實作可知,explicit Intent最好是用在同一個App中,因為我們知道這個App中有哪些Activities,而implicit Intent則可用在呼叫其他第三方的App時(其他App能不能接收Intent我們不得而知,因此還會再多一個if敘述來確保有App可接收時才執行)。

References


上一篇
Day 17. AndroidManifest.xml 文件
下一篇
Day 19. App的事件監聽 - Event Listener (part.1)
系列文
向Android APP開發說Hello30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言